import tester.cobertura.Instrument;

/**
 * @author Adam Blackwell & Ryan Cassidy
 */
// to represent a bank account
@Instrument 
interface IAccount {

	// produce an updated account after depositing the given amount
	abstract IAccount deposit(int amt);

	// produce an updated account after withdrawing the given amount
	abstract IAccount withdraw(int amt);

	// Checks if you can withdraw a certain amount.
	abstract boolean canWithdraw(int i);

	// Checks if two accounts are the same.
	abstract boolean same(IAccount act);

	// Checks if this account is a Checking account.
	public abstract boolean isChecking();

	// Checks if this account is a Credit account.
	public abstract boolean isCredit();

	// Checks if this account is a Savings account.
	public abstract boolean isSavings();

	// Turns the account into a Checking account.
	public abstract Checking toChecking();

	// Turns the account into a Credit account.
	public abstract Credit toCredit();

	// Turns the account into a Savings account.
	public abstract Savings toSavings();

	// Checks if this account is a PremiumChecking account
	public abstract boolean isPremiumChecking();

	// Turns the account into a PremiumChecking account.
	public abstract PremiumChecking toPremiumChecking();
}